win32: Fall back to raleigh with the classic theme
authorAlexander Larsson <alexl@redhat.com>
Tue, 3 Apr 2012 17:26:15 +0000 (19:26 +0200)
committerAlexander Larsson <alexl@redhat.com>
Tue, 3 Apr 2012 17:26:15 +0000 (19:26 +0200)
This is not ideal, we should have a real classic windows theme,
but at least its better than everything being pink, which is what
happens otherwise when theming is not enables.

gtk/Makefile.am
gtk/gtk-win32-classic.css [new file with mode: 0644]
gtk/gtk.gresource.xml
gtk/gtksettings.c
gtk/gtkwin32theme.c
gtk/gtkwin32themeprivate.h

index e939a77d6afcfb40180f270d84344469959debba..1f450284a5b38a1f7c649552a66df7cb8eed416c 100644 (file)
@@ -961,6 +961,7 @@ gtk_extra_sources =                         \
        gtk-win32-base.css                      \
        gtk-win32.css                           \
        gtk-win32-xp.css                        \
+       gtk-win32-classic.css                   \
        gtkversion.h.in                         \
        gtkmarshalers.list                      \
        fallback-c89.c
@@ -1036,7 +1037,7 @@ gtktypebuiltins.c: @REBUILD@ $(gtk_public_h_sources) $(deprecated_h_sources) gtk
 gtkresources.h: gtk.gresource.xml
        $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/gtk.gresource.xml \
                --target=$@ --sourcedir=$(srcdir) --c-name _gtk --generate-header --manual-register
-gtkresources.c: gtk.gresource.xml gtk-default.css gtk-win32.css $(DND_CURSORS)
+gtkresources.c: gtk.gresource.xml gtk-default.css gtk-win32.css gtk-win32-xp.css gtk-win32-base.css gtk-win32-classic.css $(DND_CURSORS)
        $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/gtk.gresource.xml \
                --target=$@ --sourcedir=$(srcdir) --c-name _gtk --generate-source --manual-register
 
diff --git a/gtk/gtk-win32-classic.css b/gtk/gtk-win32-classic.css
new file mode 100644 (file)
index 0000000..e28a153
--- /dev/null
@@ -0,0 +1,4 @@
+/* We should have a real win32 classic theme that picks up\r
+   colors from the settings. But for now, at least don't break\r
+   when win32 is in classic mode by just using raleigh. */\r
+@import url("Raleigh.css");\r
index 15af2f6265e1e4321cea6e99c54f78a3638d9d38..939d35f48d84946e3c21cede1aef33d9a6a74efc 100644 (file)
@@ -5,6 +5,7 @@
     <file>gtk-win32.css</file>
     <file>gtk-win32-xp.css</file>
     <file>gtk-win32-base.css</file>
+    <file>gtk-win32-classic.css</file>
     <file alias="cursor/dnd-ask.png">cursor_dnd_ask.png</file>
     <file alias="cursor/dnd-link.png">cursor_dnd_link.png</file>
     <file alias="cursor/dnd-none.png">cursor_dnd_none.png</file>
index 2e17430fcb9e59befc0a0e22b1d1cbe5cab33281..f265642bbf4eeca515cac8aea8f0291b53f5ad92 100644 (file)
 #include "quartz/gdkquartz.h"
 #endif
 
-#ifdef GDK_WINDOWING_WIN32
-#include <windows.h>
-#endif
-
 #undef GDK_DEPRECATED
 #undef GDK_DEPRECATED_FOR
 #define GDK_DEPRECATED
@@ -331,14 +327,6 @@ gtk_settings_class_init (GtkSettingsClass *class)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (class);
   guint result;
-#ifdef G_OS_WIN32
-  OSVERSIONINFO version;
-  BOOL version_res;
-
-  memset (&version, 0, sizeof (version));
-  version.dwOSVersionInfoSize = sizeof (version);
-  version_res = GetVersionEx (&version);
-#endif
 
   gobject_class->finalize = gtk_settings_finalize;
   gobject_class->get_property = gtk_settings_get_property;
@@ -420,9 +408,7 @@ gtk_settings_class_init (GtkSettingsClass *class)
                                                                    P_("Theme Name"),
                                                                    P_("Name of theme to load"),
 #ifdef G_OS_WIN32
-                                                                 (version_res && version.dwMajorVersion >= 6) ?
-                                                                 "gtk-win32" :
-                                                                 "gtk-win32-xp",
+                                                                 _gtk_win32_theme_get_default (),
 #else
                                                                   "Raleigh",
 #endif
index 6f4df72356421fd961940d6de99546fa8edc5d67..87bcff52c90e7c03e5ee832efdeb40c1c0b748cf 100644 (file)
@@ -31,6 +31,7 @@
 
 static HINSTANCE uxtheme_dll = NULL;
 static gboolean use_xp_theme = FALSE;
+static OSVERSIONINFO os_version;
 static HTHEME needs_alpha_fixup1 = NULL;
 static HTHEME needs_alpha_fixup2 = NULL;
 static HTHEME needs_alpha_fixup3 = NULL;
@@ -84,7 +85,6 @@ static GHashTable *hthemes_by_class = NULL;
 static void
 _gtk_win32_theme_init (void)
 {
-  OSVERSIONINFO version;
   char *buf;
   char dummy;
   int n, k;
@@ -141,9 +141,10 @@ _gtk_win32_theme_init (void)
 
   hthemes_by_class = g_hash_table_new (g_str_hash, g_str_equal);
 
-  memset (&version, 0, sizeof (version));
-  version.dwOSVersionInfoSize = sizeof (version);
-  if (GetVersionEx (&version) && version.dwMajorVersion == 5)
+  memset (&os_version, 0, sizeof (os_version));
+  os_version.dwOSVersionInfoSize = sizeof (os_version);
+  GetVersionEx (&os_version);
+  if (os_version.dwMajorVersion == 5)
     {
       needs_alpha_fixup1 = _gtk_win32_lookup_htheme_by_classname ("scrollbar");
       needs_alpha_fixup2 = _gtk_win32_lookup_htheme_by_classname ("toolbar");
@@ -444,3 +445,16 @@ _gtk_win32_theme_color_resolve (const char *theme_class,
 #endif
   return TRUE;
 }
+
+const char *
+_gtk_win32_theme_get_default (void)
+{
+#ifdef G_OS_WIN32
+  _gtk_win32_theme_init ();
+  
+  if (use_xp_theme)
+    return (os_version.dwMajorVersion >= 6) ? "gtk-win32" : "gtk-win32-xp";
+#endif
+  return "gtk-win32-classic";
+}
+
index 309c53c778c53d1b9db42ee49f0a090a0dc20307..22a2a54638eee3c8dcd35a157552c602f9899d83 100644 (file)
@@ -55,6 +55,7 @@ GtkSymbolicColor  *_gtk_win32_theme_color_parse   (GtkCssParser      *parser);
 gboolean           _gtk_win32_theme_color_resolve (const char        *theme_class,
                                                   gint               id,
                                                   GdkRGBA           *color);
+const char *      _gtk_win32_theme_get_default    (void);
 
 G_END_DECLS